trait object
例
code:rs
let mut buf: Vec<u8> = vec![];
let writer: &mut Write = &mut buf;
ここでの値writerがtrait object
&mut Traitのような型になる
Writeはtraitの1つmrsekut.icon
何と何を指している?
値へのpointer
これは普通のpointermrsekut.icon
コンパイル時に、その型用のtraitの実装が紐付けられる
上のコード例で言えば、impl Write for Vec<u8> {..}の実装が紐付けられる
何が嬉しいのかよくわかっていない
嬉しいと以下嬉しくないとかではなく、そういう構造で実装してますよ、ってだけかもしれない
他の知っている言語へのアナロジーをうまくできていない
たぶんそんな難しいものではなく、身近なものなんだろうなという気はしている
code:ts
interface IWriter {
write(str: string): void
}
class Writer1 implements IWriter {
write(str: string): void {
console.log(str)
}
}
class Writer2 implements IWriter {
write(str: string): void {
console.log(str)
}
}
const w: IWriter = new ????;
w.write('hoge')
こんな風に書いた時の、wと同じ?
w自体は、IWriter型で、interfaceに依存している
実体が、Writer1なのかWriter2なのかは、コンパイル時には決定できない